/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.12.15
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   循环指令属性编辑视窗
*                                                                         *
 ***************************************************************************/
#ifndef FORINSTRUCTIONVIEW_H
#define FORINSTRUCTIONVIEW_H

#include "forinstructionview_global.h"
#include <QWidget>
#include <QTranslator>

class ProgramView;

/**
 * @brief The EM_FOR_VALUE_TYPE enum　循环初始值与目标值类型
 */
enum EM_FOR_VALUE_TYPE
{
    EM_FOR_VALUE_TYPE_CONSTANT = 1,
    EM_FOR_VALUE_TYPE_R = 2,
    EM_FOR_VALUE_TYPE_AR = 3
};

namespace Ui {
class ForInstructionView;
}

/**
 * @brief The ForInstructionView class　循环指令属性编辑视窗类
 */
class FORINSTRUCTIONVIEWSHARED_EXPORT ForInstructionView : public QWidget
{
    Q_OBJECT

public:
    ForInstructionView(int styleId,QWidget *parent = 0);

    /**
     * @brief updateView　更新设置数据到界面控件上
     */
    void updateView();
    /**
     * @brief getInput　获取界面输入数据
     */
    void getInput();

    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);

private:
    QTranslator translator;

public:
    ProgramView *programView;

    /**
     * @brief forInstructionHead　循环头
     */
    QString forInstructionHead;
    /**
     * @brief forInstructionTail　循环尾
     */
    QString forInstructionTail;
    /**
     * @brief selectHeadFlag　循环头选择标志 0:未选择  1:选择
     */
    int selectHeadFlag;
    /**
     * @brief selectTailFlag　循环尾选择标志 0:未选择  1:选择
     */
    int selectTailFlag;

    /**
     * @brief dealValueType　对开始值的处理方式
     */
    QString dealValueType;
    /**
     * @brief dealValueTypeFlag　对循环头的处理方式标志　0:TO  1:DOWN
     */
    int dealValueTypeFlag;

    /**
     * @brief rIndex　循环计数暂存器编号
     */
    QString rIndex;
    /**
     * @brief initialValue　初始值
     */
    QString initialValue;
    /**
     * @brief targetValue　结束值
     */
    QString targetValue;
    /**
     * @brief initialValueTypeIndex　初始值类型　1:constant  2:R  3:AR
     */
    int initialValueTypeIndex;
    /**
     * @brief targetValueTypeIndex　结束值类型　1:constant  2:R  3:AR
     */
    int targetValueTypeIndex;

    /**
     * @brief initialData　初始值数据
     */
    QString initialData;
    /**
     * @brief targetData　结束值数据
     */
    QString targetData;

    /**
     * @brief note　指令注释
     */
    QString note;

signals:
    /**
     * @brief selectForHead　选择循环头
     */
    void selectForHead();
    /**
     * @brief selectFortail　选择循环尾
     */
    void selectFortail();
    /**
     * @brief selectToType　选择TO类型
     */
    void selectToType();
    /**
     * @brief selectDownType　选择DOWNTO类型
     */
    void selectDownType();
    /**
     * @brief clearNote　清除指令注释
     */
    void clearNote();
    /**
     * @brief finishEditInstruction　完成指令编辑
     */
    void finishEditInstruction();
    /**
     * @brief saveInstructionHead　保存指令
     * @param forInstructionHead　循环指令
     */
    void saveInstructionHead(QString forInstructionHead);

private slots:
    /**
     * @brief on_loopHead_radioButton_clicked　选择循环头槽函数
     */
    void on_loopHead_radioButton_clicked();

    /**
     * @brief on_loopTail_radioButton_clicked　选择循环尾槽函数
     */
    void on_loopTail_radioButton_clicked();

    /**
     * @brief on_TO_radioButton_clicked　选择TO类型槽函数
     */
    void on_TO_radioButton_clicked();

    /**
     * @brief on_DOWNTO_radioButton_clicked　选择DOWNTO类型槽函数
     */
    void on_DOWNTO_radioButton_clicked();

    /**
     * @brief on_clearNote_Btn_clicked　清除指令注释槽函数
     */
    void on_clearNote_Btn_clicked();

    /**
     * @brief on_forward_Btn_clicked　上一页槽函数
     */
    void on_forward_Btn_clicked();

    /**
     * @brief on_save_Btn_clicked　保存指令槽函数
     */
    void on_save_Btn_clicked();

private:
    Ui::ForInstructionView *ui;
};

#endif // FORINSTRUCTIONVIEW_H
